const express = require('express');
const processService = require('../services/processService');

const router = express.Router();

/**
 * POST /api/process/batch
 * 批量处理数据
 */
router.post('/batch', async (req, res) => {
  try {
    const { batchSize = 10 } = req.body;

    console.log(`收到批量处理请求，批次大小: ${batchSize}`);

    const result = await processService.processBatch(batchSize);

    res.json(result);
  } catch (error) {
    console.error('批量处理失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

/**
 * POST /api/process/all
 * 处理所有待处理数据
 */
router.post('/all', async (req, res) => {
  try {
    const { batchSize = 10 } = req.body;

    console.log('收到处理所有数据请求');

    // 由于处理可能很耗时，这里先返回响应，后台继续处理
    res.json({
      success: true,
      message: '已开始处理，请稍后查询处理状态'
    });

    // 后台继续处理
    processService.processAll(batchSize).catch(error => {
      console.error('处理所有数据失败:', error.message);
    });
  } catch (error) {
    console.error('启动处理失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

/**
 * POST /api/process/single/:id
 * 处理单条记录
 */
router.post('/single/:id', async (req, res) => {
  try {
    const { id } = req.params;

    // 获取记录
    const records = await processService.getPendingRecordsList(100);
    const record = records.find(r => r.id === parseInt(id));

    if (!record) {
      return res.status(404).json({
        success: false,
        message: '记录不存在或已处理'
      });
    }

    const result = await processService.processSingleRecord(record);

    res.json(result);
  } catch (error) {
    console.error('处理单条记录失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

/**
 * GET /api/process/pending
 * 获取待处理记录列表（支持分页）
 */
router.get('/pending', async (req, res) => {
  try {
    const { page = 1, pageSize = 20 } = req.query;

    const result = await processService.getPendingRecords(
      parseInt(page), 
      parseInt(pageSize)
    );

    res.json({
      success: true,
      ...result
    });
  } catch (error) {
    console.error('获取待处理记录失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

/**
 * DELETE /api/process/delete/:id
 * 删除待处理记录
 */
router.delete('/delete/:id', async (req, res) => {
  try {
    const { id } = req.params;

    console.log(`收到删除记录请求，ID: ${id}`);

    const result = await processService.deleteRecord(parseInt(id));

    res.json(result);
  } catch (error) {
    console.error('删除记录失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

/**
 * GET /api/process/statistics
 * 获取处理统计信息
 */
router.get('/statistics', async (req, res) => {
  try {
    const result = await processService.getProcessStatistics();
    
    res.json({
      success: true,
      ...result
    });
  } catch (error) {
    console.error('获取处理统计失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

/**
 * POST /api/process/fix-avatars
 * 修复头像问题
 */
router.post('/fix-avatars', async (req, res) => {
  try {
    const { batchSize } = req.body;

    console.log('收到修复头像请求');

    // 由于修复可能很耗时，这里先返回响应，后台继续处理
    res.json({
      success: true,
      message: '已开始修复头像，请稍后查询统计信息'
    });

    // 后台继续处理
    processService.fixAvatars(batchSize).then(result => {
      console.log('头像修复完成:', result);
    }).catch(error => {
      console.error('修复头像失败:', error.message);
    });
  } catch (error) {
    console.error('启动头像修复失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

/**
 * GET /api/process/avatar-statistics
 * 获取头像统计信息
 */
router.get('/avatar-statistics', async (req, res) => {
  try {
    const result = await processService.getAvatarStatistics();
    
    res.json({
      success: true,
      ...result
    });
  } catch (error) {
    console.error('获取头像统计失败:', error.message);
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

module.exports = router;

